﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProcelNasEscolas.Model.Fichas;
using ProcelNasEscolas.Model.Interfaces;
using ProcelNasEscolas.Model.Respostas;
using ProcelNasEscolas.Model;

namespace ProcelNasEscolas.Data
{
    public class TurmaDao : AbstractCrudDao<TurmaData>, ITurmaDao 
    {

        public Turma ToModelObject(TurmaData turmaData)
        {
            Turma turmaModel = new Turma();
            EscolaDao  escolaDao = new EscolaDao();
            turmaModel.Escola = escolaDao.ToModelObject(turmaData.EscolaData);
            turmaModel.Id = turmaData.Id;
            turmaModel.Nome = turmaData.Nome;
            
            return turmaModel;
        }

        public TurmaData CreateOrUpdate(Turma turmaModel)
        {
            try
            {
                TurmaData turmaData = new TurmaData();

                IList<TurmaData> turmas = this.GetObjectContext().IEntidadeDataSet.OfType<TurmaData>().Include("EscolaData").Where(turma => turma.Id == turmaModel.Id).ToList();

                if (turmas.Count == 0)
                {
                    this.Add("IEntidadeDataSet", turmaData);
                }
                else
                {
                    turmaData = turmas.First();
                }

                turmaData.Nome = turmaModel.Nome;
                EscolaData escolaTemp = new EscolaDao().CreateOrUpdate(turmaModel.Escola);
                turmaData.EscolaData = this.GetObjectContext().IEntidadeDataSet.OfType<EscolaData>().Where(escola => escola.Id == escolaTemp.Id).First();

                this.SaveChanges();

                return turmaData;
            }
            catch (Exception e)
            {
                System.Console.Out.WriteLine("" + e);
                return null;
            }
        }

        public Turma GetTurma(int Id)
        {
            try
            {
                IList<TurmaData> result = this.GetObjectContext().IEntidadeDataSet.OfType<TurmaData>().Include("EscolaData")
                    .Where(c => c.Id == Id).ToList();

                return this.ToModelObject(result.First());
            }
            catch (Exception e)
            {
                System.Console.Out.WriteLine("" + e);
                return null;
            }
        }

        public IList<Turma> GetAll()
        {
            IList<TurmaData> result = this.GetObjectContext().IEntidadeDataSet.OfType<TurmaData>().Include("EscolaData")
                 .ToList();
            IList<Turma> turmas = new List<Turma>();

            foreach (TurmaData turma in result)
            {
                turmas.Add(this.ToModelObject(turma));
            }

            return turmas;
        }
    }
}